'use strict'

const { users,questionnaire } = require('../models');
const auth = require('../utils/auth');

//首页
var fn_index = async (ctx, next) => {        //异步函数中间件
    ctx.render('inherit_index.html');
};

//登录判断
var fn_login = async (ctx, next) => {        //异步函数中间件
    var username = ctx.request.body.name_username.trim() || '';
    var password = ctx.request.body.name_pwd.trim() || '';

    var res = '';
    // 记住密码的测试（未完成）
    // var rememberme = ctx.request.body.rememberMe || '';
    // console.log(rememberme);

    console.log(`用户名：${username}     密码：${password}`);

    // 向数据库查询users表中的所有数据
    var results = await users.findOne({     // 我们使用await因为findAll()返回了一个promise
        where: {   // 给查询语句个where条件
            userName: username,        // userName字段等于用户输入的username
            password: password         // password字段等于用户输入的password
        }
    });
    // console.log(results);       // 输出一个数组[model]为从数据库中查询出符合条件的数据

    var resultsJson = JSON.stringify(results);  // 用JSON.stringify将查询出来的 results 数据转化为一个对象
    // console.log(resultsJson);

    if (resultsJson !== 'null') {        // 密码正确
        ctx.response.redirect('/home');

        // 密码正确以后给session赋值        可以在网页按f12后的cookie中查看
        ctx.session.userId = results.id;
        ctx.session.userName = results.userName;
        res = { code: 200 };   // 状态为200，正常

    } else {           // 密码错误
        ctx.response.redirect('/loginError');
        res = { code: 1000 };   // 状态为1000，登录错误
    }
};

// 密码正确 登录成功
var fn_login_ok = async (ctx, next) => {
    var username = ctx.session.userName;


    // 将数据库里所有的调查问卷名与调查问卷id循环打印到home.html页面
    // 用户表的所有数据
    var userAll = JSON.parse(JSON.stringify(await users.findAll()));
    // console.log(userAll);

    // 查询问卷调查表里的所有数据
    var questionnairesAll = JSON.parse(JSON.stringify(await questionnaire.findAll({
        order: [
            ['id', 'desc']
          ]
    })));
// console.log(questionnairesAll);

    questionnairesAll.forEach((qos=>{
        var publishUserName = userAll.filter(row=>{
            return qos.publishUserId === row.id;
        })[0];
        // console.log(publishUserName);

        qos.publishUserName = publishUserName === undefined ? '匿名' : publishUserName.userName;
        // console.log(qos.publishUserName);
    }))

    var obj = {
        username,
        questionnairesAll
    }

    ctx.render('Home.html',obj)
}


// 密码错误报错
var fn_login_error = async (ctx, next) => {        // 异步函数中间件
    // 渲染错误页面
    ctx.render('Error.html', {
        // 网页头像
        icon: "/statics/img/loginError.png",
        // 网页插图
        inbetweening: "/statics/img/loginErrorPicture.png",
        // 网页标题
        title: "登录失败",
        // 错误内容
        errorContent: "抱歉，您的账号或密码验证失败",
        // 按钮一路径
        router1: '/',
        // 按钮一文本
        button1: "重新登陆",
        // 按钮二路径
        router2: '/register',
        // 按钮二文本
        button2: "注册"
    });

}

// 注销判断
var logout_fn = async (ctx, next) => {
    ctx.session = null;
    ctx.body = { code: 200, msg: '注销成功' };
}



module.exports = {      //暴露对象，键为路径，值为一个数组（请求类型，文件中异步函数）
    '/': ['get', auth, fn_index],    // auth可以作为一个条件
    '/home': ['get', auth, fn_login_ok],    // auth可以作为一个条件
    '/loginDone': ['post', fn_login],
    '/logout': ['post', auth, logout_fn],
    '/loginError': ['get', fn_login_error],
}